package com.tarena.rocket.study;

import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 负责在web项目启动时
 * 接收web请求,并将请求参数传递给RocketMQ的生产者
 * 将消息发送出去 nameserver broker topic tag
 */
@RestController
public class SenderController {
    /**
     * 请求地址:/send
     * 请求方式:get
     * 请求参数:String msg
     * 返回值:自定义一个消费发送的结果 "success"
     * localhost:8090/send?msg='hello world'
     */
    @Autowired
    private RocketMQTemplate rocketMQTemplate;
    @GetMapping("/send")
    public String send(String msg){
        //将请求传递过来的msg作为message对象发送到RocketMQ
        //1.封装消息 payLoad载荷,就是想要传递的消息数据
        Message message= MessageBuilder.withPayload(msg).build();
        //2.使用template发送消息
        //send方法的参数:
        // topic: 队列的名称 如果队列不存在,rocketMQTemplate会自动在rocketmq中创建
        // message: 生产者封装的message
        String[] tags ={"taga","tagb","tagc"};
        for(int i=0;i<100;i++) {
            int index=i%3;//0,1,2
            rocketMQTemplate.send("practice-test02-topic:"+tags[index], message);
            System.out.println("生产端发送消息:第"+i+"条");
        }
        return "success";
    }
    @GetMapping("/send/delay")
    public String delaySend(String name){
        Message message=MessageBuilder.withPayload(name).build();
        rocketMQTemplate.syncSend("test-delay-topic01",message,2000,4);
        return "success";
    }
}
